import scala.collection.mutable

/**
 * 现有如下数据需要处理：
    *字段：用户ID，位置ID，开始时间，停留时长（分钟）
 *
 *4行样例数据：
     UserA,LocationA,8,60
     UserA,LocationA,9,60
     UserB,LocationB,10,60
     UserB,LocationB,11,80
 *
 *样例数据中的数据含义是：
    *用户UserA，在LocationA位置，从8点开始，停留了60钟
 *
 *处理要求：
    *1、对同一个用户，在同一个位置，连续的多条记录进行合并
    *2、合并原则：开始时间取最早时间，停留时长累计求和
 */

object Subject3 {
  def main(args: Array[String]): Unit = {
    /**
     *      UserA,LocationA,8,60
            UserA,LocationA,9,60
            UserB,LocationB,10,60
            UserB,LocationB,11,80
     */
//    val data = "UserA,LocationA,8,60\nUserA,LocationA,9,60\nUserB,LocationB,10,60\nUserB,LocationB,11,80\n"
    /**
     *      UserA,LocationA,8,60
            UserA,LocationA,9,60
            UserA,LocationB,6,95
            UserB,LocationA,9,40
            UserB,LocationB,10,60
            UserB,LocationB,11,80
     */
    val data = "UserA,LocationA,8,60\nUserA,LocationA,9,60\nUserA,LocationB,6,95\nUserB,LocationA,9,40\nUserB,LocationB,10,60\nUserB,LocationB,11,80"
    //按行分割
    val strings = data.split("\n")
    val map: mutable.Map[String, String] = scala.collection.mutable.Map()
    for (string <- strings){
      //按,分割，分别获得用户ID，位置ID，开始时间，停留时长（分钟）
      val str = string.split(",")
      val exist = map.get(s"${str(0)},${str(1)}")
      exist match {
        case None =>
          //map中的映射为："用户ID,位置ID" -> "开始时间,停留时长"
          map(s"${str(0)},${str(1)}") = s"${str(2)},${str(3)}"
        case Some(x) =>
          val strings1 = x.split(",")
          //开始时间取最早时间
          val hour = math.min(Integer.valueOf(str(2)), Integer.valueOf(strings1(0)))
          //停留时长累计求和
          val minute = Integer.valueOf(str(3)) + Integer.valueOf(strings1(1))
          //覆盖原有纪录
          map(s"${str(0)},${str(1)}") = s"$hour,$minute"
      }
    }
    map.foreach(println(_))
  }
}
